/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import entity.PerfilUsuarioEntity;
import entity.UsuarioEntity;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import utils.HibernateUtil;

/**
 *
 * @author NAYELI
 */
public class UsuarioDAO {

    public static synchronized int saveUsuario(UsuarioEntity eUsuario){
        Transaction transaction = null;
        Session session = null;
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            int idPerfil = eUsuario.getPerfil().getIdperfil();
            PerfilUsuarioEntity perfilUsua = (PerfilUsuarioEntity) session.load(PerfilUsuarioEntity.class, new Integer(idPerfil));
            eUsuario.setPerfil(perfilUsua);
            transaction = session.beginTransaction();
            session.save(eUsuario);
            transaction.commit();
            session.close();
            return eUsuario.getIdusuario();
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();
            if(session!= null&& session.isOpen())
                session.close();
            return -1;
        } catch (Exception e) {
            transaction.rollback();
            if(session!= null&& session.isOpen())
                session.close();
            return -1;
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }

    public static List<UsuarioEntity> getAllUsuarios(){
        Session session = HibernateUtil.getSessionFactory().openSession();
        List <UsuarioEntity>lista=null;
	try{
            String query ="FROM UsuarioEntity";
            lista=session.createQuery(query).list();
            session.close();
        }catch(org.hibernate.exception.GenericJDBCException excepts){
            if(session!= null&& session.isOpen())
                session.close();
	}catch(Exception e){
            if(session!= null&& session.isOpen())
            session.close();
	} finally{
            if(session!= null && session.isOpen())
            session.close();
	}
        return lista;
    }

    public static List<UsuarioEntity> getAllUsuariosNuevos(){
        Session session = HibernateUtil.getSessionFactory().openSession();
        List <UsuarioEntity>lista=null;
	try{
            String query ="FROM UsuarioEntity U WHERE U.password='na'";
            lista=session.createQuery(query).list();
            session.close();
        }catch(org.hibernate.exception.GenericJDBCException excepts){
            if(session!= null&& session.isOpen())
                session.close();
	}catch(Exception e){
            if(session!= null&& session.isOpen())
            session.close();
	} finally{
            if(session!= null && session.isOpen())
            session.close();
	}
        return lista;
    }

    public static synchronized int saveUsuarioNuevo(UsuarioEntity eUsuario){
        Transaction transaction = null;
        Session session = null;
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            PerfilUsuarioEntity perfilUsua = (PerfilUsuarioEntity) session.load(PerfilUsuarioEntity.class, new Integer(0));
            eUsuario.setPerfil(perfilUsua);
            transaction = session.beginTransaction();
            session.save(eUsuario);
            transaction.commit();
            session.close();
            return eUsuario.getIdusuario();
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();
            if(session!= null&& session.isOpen())
                session.close();
            return -1;
        } catch (Exception e) {
            transaction.rollback();
            if(session!= null&& session.isOpen())
                session.close();
            return -1;
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }
        
    

    /*public static void main(String[] args){
        Integer perfilUsua=0;
        UsuarioEntity eUsuario = new UsuarioEntity();
        System.out.println("++++++++++++++++++++++++++++++++++++");
        eUsuario.setNombreusuario("Lourdes");
        eUsuario.setApellidopaterno("Algo");
        eUsuario.setApellidomaterno("algo");
        eUsuario.setNickusuario("lulu@hotmail.com");
        eUsuario.setPassword("lulu");
        eUsuario.setEmail("lulu@hotmail.com");
        eUsuario.setStatus(1);
        saveUsuario(eUsuario);

        List<UsuarioEntity> listaUsuarios = new ArrayList<UsuarioEntity>();
        UsuarioDAO usuario = new UsuarioDAO();
        listaUsuarios = usuario.getAllUsuarios();
        //System.out.println(listaUsuarios.size());
        if(listaUsuarios!=null){
            System.out.println(listaUsuarios.size());
        for(UsuarioEntity usu:listaUsuarios){
            System.out.println("usuario: " + usu.getNombreusuario());
        }
        }
    }*/

}
